package pe.gob.osce.sirenas.wd.jsf.bean.administracion;
/*
* Resumen.
* Objeto 				:	RegistroArbitroBean.java
* Descripcion 			: 	.
* Fecha de Creacion 	: 	26/02/2015.
* Pry de Creacion 		: 	RNA/RNS.
* Autor 				: 	Julio Cayulla.
* ================================================================================================
* Modificaciones
* Motivo						Fecha		Nombre				Descripcion
* ================================================================================================
*
*/
import java.io.Serializable;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.ResourceBundle;

import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;

import pe.gob.osce.sirenas.model.AcreditacionDTO;
import pe.gob.osce.sirenas.model.AreaProfesionDTO;
import pe.gob.osce.sirenas.model.AuditoriaDTO;
import pe.gob.osce.sirenas.model.CentroEstudiosDTO;
import pe.gob.osce.sirenas.model.EstadoDTO;
import pe.gob.osce.sirenas.model.MateriaControversiaDTO;
import pe.gob.osce.sirenas.svc.MantenimientoTablasMaestrasServiceLocal;
import pe.gob.osce.sirenas.wd.util.ConstanteWeb;
import pe.gob.osce.sirenas.wd.util.RepositorioDatos;
import pe.gob.osce.sirenas.wd.util.UBaseManage;

@ManagedBean(name="mantenimientoTablasMaestrasBean")
@SessionScoped
public class MantenimientoTablasMaestrasBean extends UBaseManage implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -7651008527332838745L;

	final static Logger log = Logger.getLogger(MantenimientoTablasMaestrasBean.class);
	
	@EJB
	private	MantenimientoTablasMaestrasServiceLocal	mantenimientoTablasService;
	

	ResourceBundle propSirenas = ResourceBundle.getBundle(ConstanteWeb.PROPERTIES);
	
	private RepositorioDatos repositorioDatos;
    private String console; 
    
    private RequestContext context; 
	
	

	private Integer indiceListaAreaProfesion;
	private Boolean btnAgregar;
	private Boolean btnRectificar;
	private Boolean esPendiente;
	private Boolean esEditar;

	
	private AreaProfesionDTO areaProfesion;
	private List<AreaProfesionDTO> listAreaProfesion;
	
	private CentroEstudiosDTO centroEstudios;
	private List<CentroEstudiosDTO> listCentroEstudios;
	
	private EstadoDTO estado;
	private List<EstadoDTO> listEstado;
	
	private MateriaControversiaDTO materiaControversia;
	private List<MateriaControversiaDTO> listMateriaControversia;
	
	
	
	public String verAreaProfesion() throws ParseException {		
		establecerObjetoSession(ConstanteWeb.IND_CARGAR_LISTAS, false);
		
		this.areaProfesion= new AreaProfesionDTO();
		repositorioDatos=obtenerRepositorioDatos();
		obtenerListaAreaProfesion();
		btnAgregar=true;
		btnRectificar=false;
		esEditar=false;
	
	
		return ConstanteWeb.RPTA_AREAPROFESION;
	}
	
	
	
	
	public String verRegistroArbitro() throws ParseException {		
		establecerObjetoSession(ConstanteWeb.IND_CARGAR_LISTAS, false);
		
	
		List<AcreditacionDTO> listaAcreditaciones = new ArrayList<AcreditacionDTO>();
		establecerObjetoSession(ConstanteWeb.LISTA_ACREDITACIONES,listaAcreditaciones); 
		
		repositorioDatos=obtenerRepositorioDatos();
		
		/**Validar permisos de Botones*/
		btnAgregar=true;
		btnRectificar=false;
		esEditar=false;
		
		return ConstanteWeb.RPTA_REGISTROARBITRO;
	}
	
	private void obtenerListaAreaProfesion(){
		this.indiceListaAreaProfesion=1;
		try {
			this.listAreaProfesion=mantenimientoTablasService.obtenerListaAreaProfesion();
			indexarListaAreaProfesion();
			establecerObjetoSession(ConstanteWeb.LISTA_FORM_ACADEMICA,listAreaProfesion);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	private String convertEstado(Long idEstado)
	{
		String estado="";
		
		if(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO))==idEstado)
			estado="Activo";
		else
			estado="Inactivo";
		
		return estado;
	}
	
	
	
	

	public void cargarAreaProfesion(Integer index){
		this.areaProfesion = this.listAreaProfesion.get(obtieneIndexListaAreaProfesion(index));
		this.btnAgregar=false;
		this.esEditar=true;
		this.btnRectificar=true;
	
			
		
		
	}
	
	public void botonCancelar(){
		this.areaProfesion= new AreaProfesionDTO();
		this.btnAgregar=true;
		this.btnRectificar=false;
	}
	
	

	
	public int obtieneIndexListaAreaProfesion(Integer index){
		int indice=0;
		for (AreaProfesionDTO areaProfesion : this.listAreaProfesion) {
			if(areaProfesion.getIndice()==index){
				break;
			}
			indice++;
		}
		return indice;
	}	
	
	public void  guardarAreaProfesion(){
        List<AreaProfesionDTO> listAreaProfesionDTO;
		AuditoriaDTO auditoria=(AuditoriaDTO)obtenerObjetoSession(ConstanteWeb.AUDITORIA);
		try{
			listAreaProfesionDTO = this.listAreaProfesion;
			this.listAreaProfesion= mantenimientoTablasService.guardarAreaProfesion(listAreaProfesionDTO, auditoria);
			indexarListaAreaProfesion();
			cerrarConfirmacionPopup();
			RequestContext.getCurrentInstance().update("idFormularioMantenimientoAreaProfesion");
			
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_REG_OK));
		}catch(Exception e){
			log.error(e.getMessage(),e);
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_REG_ERROR),"");
		}
		
		
	}
	
	
	private void indexarListaAreaProfesion()
	{
		indiceListaAreaProfesion=1;
		if (listAreaProfesion!= null) {
			for (AreaProfesionDTO areaProfesionDTO : listAreaProfesion) {
				areaProfesionDTO.setIndice(indiceListaAreaProfesion);
				areaProfesionDTO.setDescAreaProfesion(areaProfesionDTO.getDescAreaProfesion().toUpperCase());
				areaProfesionDTO.setEstadoCadena(convertEstado(areaProfesionDTO.getEstado()).toUpperCase());
				indiceListaAreaProfesion++;
			}
		}else{
			this.listAreaProfesion=new ArrayList<AreaProfesionDTO>();
		}
	}

	/**
     * Metodo que Agregar una nueva formacion academica a la Grilla 
     
     * @throws EJBException genera una excepción en caso de error.
     */
	
	private Boolean ValidarAreaProfesion()
	{
		boolean confirmacion=true;
		if(this.areaProfesion.getDescAreaProfesion().trim().length()<=Long.parseLong(propSirenas.getString(ConstanteWeb.VALORCERO)))
		{
			setMensajeroError(propSirenas.getString(ConstanteWeb.MSJ_MANT_AREAPROFESION_DESCRIPCION), "");			
			return false;
		}
			
			
		return confirmacion; 
	}
	
	public void agregarAreaProfesion(){
		if(ValidarAreaProfesion()){
		
			this.areaProfesion.setIndice(indiceListaAreaProfesion);
			this.areaProfesion.setFecRegistro(new Date());
			this.areaProfesion.setEstado(Long.parseLong(propSirenas.getString(ConstanteWeb.ID_ESTADO)));
			this.areaProfesion.setEstadoCadena(convertEstado(this.areaProfesion.getEstado()));
			this.areaProfesion.setDescAreaProfesion(this.areaProfesion.getDescAreaProfesion().toUpperCase());
			listAreaProfesion.add(areaProfesion);
			indiceListaAreaProfesion++;		
			this.areaProfesion= new AreaProfesionDTO();
		}
		
	}
	public void editarAreaProfesion(){
		if(ValidarAreaProfesion()){
			this.areaProfesion.setDescAreaProfesion(this.areaProfesion.getDescAreaProfesion().toUpperCase());
			int indice=obtieneIndexListaAreaProfesion(this.areaProfesion.getIndice());
			this.listAreaProfesion.set(indice, this.areaProfesion);
			
			this.areaProfesion= new AreaProfesionDTO();	
			this.btnAgregar=true;
			this.btnRectificar=false;
			this.esEditar=false;
		}
		
	}
	
	public void abrirConfirmacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacion').show();");
	}
	public void cerrarConfirmacionPopup(){
		context = RequestContext.getCurrentInstance();
		context.execute("PF('dialogoConfirmacion').hide();");
	}

	

	
	public void eliminarAreaProfesion(Integer index){
		AreaProfesionDTO areaProfesionTemp;
		/* Verifico que No se este rectificando ningun registro*/
		if(this.btnAgregar){
			int indice=obtieneIndexListaAreaProfesion(index);
			areaProfesionTemp = this.listAreaProfesion.get(indice);
			//Verifico si el Registro existe en la BD
			if(areaProfesionTemp.getIdAreaProfesion()!=null){
				//Si existe, cambio el estado a 0, el sistema lo tomara como eliminado de la BD
				areaProfesionTemp.setEstado(0L);
				this.listAreaProfesion.set(indice, areaProfesionTemp);
			}else{
				//Simplemente elimino el registro de la Lista
				this.listAreaProfesion.remove(indice);
			}		
		}else{
			setMensajeroInfo(propSirenas.getString(ConstanteWeb.MSJ_VALID_RECTIF));
		}
	}
	
	



	
	
	
	
	
	
	
	



	public AreaProfesionDTO getAreaProfesion() {
		return areaProfesion;
	}




	public void setAreaProfesion(AreaProfesionDTO areaProfesion) {
		this.areaProfesion = areaProfesion;
	}




	public List<AreaProfesionDTO> getListAreaProfesion() {
		return listAreaProfesion;
	}




	public void setListAreaProfesion(List<AreaProfesionDTO> listAreaProfesion) {
		this.listAreaProfesion = listAreaProfesion;
	}




	public CentroEstudiosDTO getCentroEstudios() {
		return centroEstudios;
	}




	public void setCentroEstudios(CentroEstudiosDTO centroEstudios) {
		this.centroEstudios = centroEstudios;
	}




	public List<CentroEstudiosDTO> getListCentroEstudios() {
		return listCentroEstudios;
	}




	public void setListCentroEstudios(List<CentroEstudiosDTO> listCentroEstudios) {
		this.listCentroEstudios = listCentroEstudios;
	}




	public EstadoDTO getEstado() {
		return estado;
	}




	public void setEstado(EstadoDTO estado) {
		this.estado = estado;
	}




	public List<EstadoDTO> getListEstado() {
		return listEstado;
	}




	public void setListEstado(List<EstadoDTO> listEstado) {
		this.listEstado = listEstado;
	}




	public MateriaControversiaDTO getMateriaControversia() {
		return materiaControversia;
	}




	public void setMateriaControversia(MateriaControversiaDTO materiaControversia) {
		this.materiaControversia = materiaControversia;
	}




	public List<MateriaControversiaDTO> getListMateriaControversia() {
		return listMateriaControversia;
	}




	public void setListMateriaControversia(
			List<MateriaControversiaDTO> listMateriaControversia) {
		this.listMateriaControversia = listMateriaControversia;
	}




	public Boolean getEsEditar() {
		return esEditar;
	}
	public void setEsEditar(Boolean esEditar) {
		this.esEditar = esEditar;
	}




	public Boolean getBtnAgregar() {
		return btnAgregar;
	}




	public void setBtnAgregar(Boolean btnAgregar) {
		this.btnAgregar = btnAgregar;
	}




	public Boolean getBtnRectificar() {
		return btnRectificar;
	}




	public void setBtnRectificar(Boolean btnRectificar) {
		this.btnRectificar = btnRectificar;
	}
	

	
	
	

}
